문제
풀이
문제의 numbers 인자의 길이를 확인하지 못하고 현재 index 이후 가장 가까운 큰값을 구하는 로직을 작성하여 테스트를 진행해버렸다.
아니나 다를까 numbers 배열의 길이가 긴 테스트가 진행되자 시간초과…
function solution(numbers) {
return numbers.map((v, i) => {
const diffArray = numbers.slice();
diffArray.splice(0, i + 1);
const findValue = diffArray.find((val) => val > v);
if (findValue) {
return findValue;
} else {
return -1;
}
});
}
힌트를 보니 stack을 사용해야 한다고 하여 stack의 형태로 구조를 변경하였더니 테스트 통과에 성공했다!
function solution(numbers) {
const stack = [];
const answer = new Array(numbers.length);
answer.fill(-1);
for (let i = 0; i < numbers.length; i++) {
if (!stack.length || numbers[i] < numbers[i - 1]) {
stack.push(i);
} else {
while (stack.length && numbers[stack[stack.length - 1]] < numbers[i]) {
answer[stack.pop()] = numbers[i];
}
stack.push(i);
}
}
return answer;
}